package com.example.backed.util;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

public class SecurityUtil {
    
    /**
     * 获取当前登录用户ID
     */
    public static Long getCurrentUserId() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null && authentication.isAuthenticated()) {
            try {
                // 尝试将authentication.getName()转换为Long类型的用户ID
                return Long.parseLong(authentication.getName());
            } catch (NumberFormatException e) {
                // 如果无法转换为Long，可能是username，此时应该获取principal对象
                Object principal = authentication.getPrincipal();
                if (principal instanceof org.springframework.security.core.userdetails.UserDetails) {
                    // 如果是UserDetails对象，尝试从其中获取用户ID
                    try {
                        // 假设UserDetails实现了getId()方法或可以通过反射获取id字段
                        // 这里需要根据实际UserDetails的实现来调整
                        return (Long) principal.getClass().getMethod("getId").invoke(principal);
                    } catch (Exception ex) {
                        throw new RuntimeException("无法从用户认证信息中获取用户ID", ex);
                    }
                }
                throw new RuntimeException("无法从用户认证信息中获取用户ID");
            }
        }
        return null;
    }
} 